home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / shell / igo / gosource / igo_oper.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  21.7 KB  |  879 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <winb.h>
  5. #include <te.h>
  6. #include <fntb.h>
  7. #include <gui.h>
  8. #include <file_dlg.h>
  9. #include <time.h>
  10. #include "igo.h"
  11. #include "banx.h"
  12. #include "kiffile.h"
  13. #include "title.h"
  14. #include "kifuctrl.h"
  15.  
  16. extern int    dialogId_handy ;
  17. extern int    print_dialogId ;
  18. extern int    lineset_dialogId ;
  19. extern int    dialogId_title ;
  20. extern int    auto_alertId ;
  21. extern int    deskTopId ;
  22. extern int    blacknameId ;
  23. extern int    whitenameId ;
  24. extern int    numboxId[12] ;
  25. extern int    placeId ;
  26. extern int    listMenuId[3] ;
  27. extern int    textcommentId[10] ;
  28. extern int    title_messageId[12] ;
  29. extern int    note_windowId ;
  30. extern int    warningId;
  31. extern int    commentdialogId;
  32. extern int    commentId;
  33. extern int    fsavedialogId;
  34. extern int    fsave_messageId[2];
  35. extern int    samesave_dialogId;
  36. extern int    judge_dialogId ;
  37. extern int    judge_messageId[4] ;
  38. extern int    ban_windowId ;
  39. extern int    check_alertId ;
  40.  
  41. /*    initDataMIDESK:mitem1Id[0]:MJ_MITEML40の呼び出し関数    */
  42. int    igo_init(kobj, messId, argc, pev, trigger)
  43. int        kobj ;
  44. int        messId ;
  45. int        argc ;
  46. EVENT    *pev ;
  47. int        trigger ;
  48. {
  49.     if(title_fsave_read()==ON){
  50.         title_state_set(NEW);
  51.  
  52.         MMI_SendMessage( fsave_messageId[0], MM_SETMSG, 1, 
  53.                     "棋譜デ-タが保存されておりません");
  54.         MMI_SendMessage( fsave_messageId[1], MM_SETMSG, 1, 
  55.                     "デ-タを保存して新規作成を行いますか");
  56.  
  57.         /*    オブジェクトをダイアログに取り付ける    */
  58.         MMI_SendMessage( fsavedialogId , MM_ATTACH , 1 , deskTopId ) ;
  59.  
  60.         /*    オブジェクトを表示する    */
  61.         MMI_SendMessage( fsavedialogId , MM_SHOW , 0 ) ; 
  62.  
  63.     }else{
  64.         igo_do_init();
  65.     }
  66.     
  67.     return NOERR ;
  68. }
  69.  
  70. /* initの下請け関数 */
  71. int    igo_do_init()
  72. {
  73. BAN_TYPE ban_type;
  74.  
  75.     ban_type = *title_bantype_read();
  76.     title_init();
  77.     title_bantype_set( ban_type); /* タイトルで保持すべきなのはこれだけ  */
  78.  
  79.     kifu_init();
  80.     comment_dispFunc();
  81.     title_dispFunc();
  82.     MMI_SendMessage( note_windowId , MM_ATTACH , 1 , deskTopId ) ;
  83.     MMI_SendMessage( note_windowId, MM_SHOW, 0);
  84.     MMI_SendMessage( ban_windowId , MM_ATTACH , 1 , deskTopId ) ;
  85.     MMI_SendMessage( ban_windowId, MM_SHOW, 0);
  86.  
  87.  
  88.     return NOERR ;
  89. }
  90.  
  91. /*    initDataMIDESK:mitem1Id[1]:MJ_MITEML40の呼び出し関数    */
  92. int    igo_read(kobj, messId, argc, pev, trigger)
  93. int        kobj ;
  94. int        messId ;
  95. int        argc ;
  96. EVENT    *pev ;
  97. int        trigger ;
  98. {
  99.  
  100.     if(title_fsave_read()==ON){
  101.         title_state_set(READ);
  102.  
  103.         MMI_SendMessage( fsave_messageId[0], MM_SETMSG, 1, 
  104.                     "棋譜デ-タが保存されておりません");
  105.         MMI_SendMessage( fsave_messageId[1], MM_SETMSG, 1, 
  106.                     "デ-タを保存して読込を行いますか");
  107.  
  108.         /*    オブジェクトをダイアログに取り付ける    */
  109.         MMI_SendMessage( fsavedialogId , MM_ATTACH , 1 , deskTopId ) ;
  110.  
  111.         /*    dialogId_handyでされるオブジェクトを表示する    */
  112.         MMI_SendMessage( fsavedialogId , MM_SHOW , 0 ) ; 
  113.  
  114.     }else{
  115.         igo_do_read();
  116.     }
  117.  
  118.     return NOERR ;
  119. }
  120.  
  121. /* readの下請け関数 */
  122. int    igo_do_read()
  123. {
  124. char fileName[80] ;        /*    ファイル名用の配列        */
  125. int  cell_id;
  126. int  change_flg;
  127.  
  128.     /*    ファイルダイアログで"取消"が押されたらこれ以下を実行しない    */
  129.     if( fdlgFunc( fileName ) != 0 )
  130.     {
  131.  
  132.         if(kifu_read(fileName) != 0){
  133.             /*    オブジェクトをダイアログに取り付ける    */
  134.             MMI_SendMessage( warningId , MM_ATTACH , 1 , deskTopId ) ;
  135.  
  136.             /*    warningIdで示されるオブジェクトを表示する    */
  137.             MMI_SendMessage( warningId , MM_SHOW , 0 ) ; 
  138.  
  139.             return NOERR;
  140.         }
  141.         title_fname_set(fileName);
  142.         change_flg = kifu_chg_flg_set( 1);
  143.         kifu_first();
  144.         do{
  145.             cell_id = kifu_forward();
  146.         }while( cell_id != HEAD_CELL && cell_id != REPEAT_CANNOT_BOTTOM_CELL);
  147.         
  148.         if( cell_id == HEAD_CELL){
  149.             kifu_back();
  150.         }
  151.         kifu_chg_flg_set( change_flg);
  152.         comment_dispFunc();
  153.         title_dispFunc();
  154.         MMI_SendMessage( ban_windowId , MM_ATTACH , 1 , deskTopId ) ;
  155.         MMI_SendMessage( note_windowId , MM_ATTACH , 1 , deskTopId ) ;
  156.  
  157.         line_window_resize();
  158.  
  159.         MMI_SendMessage( ban_windowId, MM_SHOW, 0);
  160.         MMI_SendMessage( note_windowId, MM_SHOW, 0);
  161.  
  162.  
  163.     }
  164.  
  165.     return NOERR ;
  166. }
  167.  
  168. /*    initDataMIDESK:mitem1Id[2]:MJ_MITEML40の呼び出し関数    */
  169. int    igo_write(kobj, messId, argc, pev, trigger)
  170. int        kobj ;
  171. int        messId ;
  172. int        argc ;
  173. EVENT    *pev ;
  174. int        trigger ;
  175. {
  176.     FILE *fp;
  177.     char wk_fname[80] ;        /*    ファイル名用の配列        */
  178.     char wk_kifname[13];
  179.     YMDHM wk_start_date;
  180.     char alp_str[] = "abcdefghijklmnopqrstuvwxyz";
  181.     int i, j;
  182.     
  183.     wk_start_date = *title_playstart_time_read();
  184.     sprintf(wk_kifname, "%02u%02u%02u%02u.kif", wk_start_date.year%100, 
  185.             wk_start_date.month%100, wk_start_date.day%100, wk_start_date.hour%100);
  186.  
  187.     if((fp = fopen(wk_kifname, "r")) == NULL){
  188.                 FDG_SetFileText(wk_kifname);
  189.  
  190.     /*    ファイルダイアログで"取消"が押されたらこれ以下を実行しない    */
  191.                 if( fdlgFunc( wk_fname ) != 0 )
  192.                 {
  193.                     title_fname_set( wk_fname);
  194.                     igo_do_write();
  195.                 }
  196.  
  197.                 return NOERR ;
  198.  
  199.     }
  200.     fclose(fp);
  201.  
  202.     for(i=0;i<strlen(alp_str);i++){
  203.         for(j=0;j<strlen(alp_str);j++){
  204.             wk_kifname[6] = alp_str[i];
  205.             wk_kifname[7] = alp_str[j];
  206.             if((fp = fopen(wk_kifname, "r")) == NULL){
  207.                 FDG_SetFileText(wk_kifname);
  208.  
  209.     /*    ファイルダイアログで"取消"が押されたらこれ以下を実行しない    */
  210.                 if( fdlgFunc( wk_fname ) != 0 )
  211.                 {
  212.                     title_fname_set( wk_fname);
  213.                     igo_do_write();
  214.                 }
  215.  
  216.                 return NOERR ;
  217.             }
  218.             fclose(fp);
  219.  
  220.         }
  221.     }
  222.  
  223.     return NOERR ;
  224. }
  225.  
  226. /* writeの下請け関数 */
  227. int    igo_do_write()
  228. {
  229.     char *fileName;         /*    ファイル名用の配列        */
  230.  
  231.     fileName = title_fname_read();
  232.     if(kifu_write(fileName) != 0){
  233.         /*    オブジェクトをダイアログに取り付ける    */
  234.         MMI_SendMessage( warningId , MM_ATTACH , 1 , deskTopId ) ;
  235.  
  236.         /*    warningIdで示されるオブジェクトを表示する    */
  237.         MMI_SendMessage( warningId , MM_SHOW , 0 ) ; 
  238.         
  239.         return NOERR;
  240.     }
  241.     title_fsave_off();
  242.     title_dispFunc();
  243.  
  244.     return NOERR ;
  245.  
  246. }
  247.  
  248. /*    initDataMIDESK:mitem1Id[4]:MJ_MITEML40の呼び出し関数    */
  249. int    igo_handy(kobj, messId, argc, pev, trigger)
  250. int        kobj ;
  251. int        messId ;
  252. int        argc ;
  253. EVENT    *pev ;
  254. int        trigger ;
  255. {
  256.     /*    オブジェクトをダイアログに取り付ける    */
  257.     MMI_SendMessage( dialogId_handy , MM_ATTACH , 1 , deskTopId ) ;
  258.  
  259.     /*    dialogId_handyでされるオブジェクトを表示する    */
  260.     MMI_SendMessage( dialogId_handy , MM_SHOW , 0 ) ; 
  261.  
  262.     return NOERR ;
  263. }
  264.  
  265.  
  266. /*    initDataMIDESK:mitem1Id[3]:MJ_MITEML40の呼び出し関数    */
  267. int    igo_samewrite(kobj, messId, argc, pev, trigger)
  268. int        kobj ;
  269. int        messId ;
  270. int        argc ;
  271. EVENT    *pev ;
  272. int        trigger ;
  273. {
  274. char *fname;
  275. FILE *fp;
  276.     
  277.     fname = title_fname_read();
  278.     if((fp=fopen(fname,"rb"))==NULL){
  279.         /*    オブジェクトをダイアログに取り付ける    */
  280.         MMI_SendMessage( warningId , MM_ATTACH , 1 , deskTopId ) ;
  281.  
  282.         /*    warningIdで示されるオブジェクトを表示する    */
  283.         MMI_SendMessage( warningId , MM_SHOW , 0 ) ; 
  284.             
  285.         return NOERR;
  286.  
  287.     }else{
  288.         
  289.         fclose(fp);
  290.         /*    オブジェクトをダイアログに取り付ける    */
  291.         MMI_SendMessage( samesave_dialogId , MM_ATTACH , 1 , deskTopId ) ;
  292.  
  293.         /*    オブジェクトを表示する    */
  294.         MMI_SendMessage( samesave_dialogId , MM_SHOW , 0 ) ; 
  295.  
  296.     }
  297.     
  298.     return NOERR ;
  299. }
  300.  
  301. /*    initDataMIDESK:mitem2Id[7]:MJ_MITEML40の呼び出し関数    */
  302. int    igo_print(kobj, messId, argc, pev, trigger)
  303. int        kobj ;
  304. int        messId ;
  305. int        argc ;
  306. EVENT    *pev ;
  307. int        trigger ;
  308. {
  309.     /*    オブジェクトをダイアログに取り付ける    */
  310.     MMI_SendMessage( print_dialogId , MM_ATTACH , 1 , deskTopId ) ;
  311.  
  312.     /*    print_dialogIdで指定されるオブジェクトを表示する    */
  313.     MMI_SendMessage( print_dialogId , MM_SHOW , 0 ) ; 
  314.  
  315.     return NOERR ;
  316. }
  317.  
  318. /*    initDataMIDESK:mitem2Id[8]:MJ_MITEML40の呼び出し関数    */
  319. int    igo_line(kobj, messId, argc, pev, trigger)
  320. int        kobj ;
  321. int        messId ;
  322. int        argc ;
  323. EVENT    *pev ;
  324. int        trigger ;
  325. {
  326.     /*    オブジェクトをダイアログに取り付ける    */
  327.     MMI_SendMessage( lineset_dialogId , MM_ATTACH , 1 , deskTopId ) ;
  328.  
  329.     /*    lineset_dialogIdで指定されるオブジェクトを表示する    */
  330.     MMI_SendMessage( lineset_dialogId , MM_SHOW , 0 ) ; 
  331.  
  332.     return NOERR ;
  333. }
  334.  
  335. /*    initDataMIDESK:mitem2Id[0]:MJ_MITEML40の呼び出し関数    */
  336. int    igo_title(kobj, messId, argc, pev, trigger)
  337. int        kobj ;
  338. int        messId ;
  339. int        argc ;
  340. EVENT    *pev ;
  341. int        trigger ;
  342. {
  343.     char tptr[21];
  344.     YMDHM *ymdhm;
  345.     time_t *timer;
  346.     int i, j, k, l;
  347.     int vicdef_id, vicdef_number;
  348.     struct tm    *current_time;
  349.     static char    *listString1[] = { "黒コミ出し", "白コミ出し", "コミなし" } ;
  350.     static char    *listString2[] = { "半", "ちょうど" } ;
  351.     static char    *listString3[] = { "黒", "白", "引き分け",
  352.                                     "黒中押し勝ち", "白中押し勝ち"} ;
  353.     
  354.     /*    オブジェクトをダイアログに取り付ける    */
  355.     MMI_SendMessage( dialogId_title , MM_ATTACH , 1 , deskTopId ) ;
  356.  
  357.     /*  値を設定する */
  358.     title_blacknameread( tptr);
  359.     MMI_SendMessage( blacknameId, MM_SETTEXT, 3, tptr, 21, FALSE);
  360.     
  361.     title_whitenameread( tptr);
  362.     MMI_SendMessage( whitenameId, MM_SETTEXT, 3, tptr, 21, FALSE);
  363.     
  364.     title_playspaceread( tptr);
  365.     MMI_SendMessage( placeId, MM_SETTEXT, 3, tptr, 21, FALSE);
  366.     
  367.     /*  日付時刻を設定する */
  368.     time(timer);
  369.     current_time = localtime(timer);
  370.     
  371.     ymdhm = title_playstart_time_read();
  372.     if(ymdhm->year== 0){
  373.         ymdhm->year = 1900 + current_time->tm_year;
  374.     }
  375.     if(ymdhm->month== 0){
  376.         ymdhm->month = 1 + current_time->tm_mon;
  377.     }
  378.     if(ymdhm->day == 0){
  379.         ymdhm->day = current_time->tm_mday;
  380.     }
  381.     MMI_SendMessage( numboxId[0], MM_SETNUMBOX, 5, ymdhm->year, 0, 9999, 1, 0);
  382.     MMI_SendMessage( numboxId[1], MM_SETNUMBOX, 5, ymdhm->month, 0, 12, 1, 0);
  383.     MMI_SendMessage( numboxId[2], MM_SETNUMBOX, 5, ymdhm->day, 0, 31, 1, 0);
  384.     MMI_SendMessage( numboxId[3], MM_SETNUMBOX, 5, ymdhm->hour, 0, 23, 1, 0);
  385.     MMI_SendMessage( numboxId[4], MM_SETNUMBOX, 5, ymdhm->minute, 0, 59, 1, 0);
  386.     
  387.     ymdhm = title_playend_time_read();
  388.  
  389.     MMI_SendMessage( numboxId[5], MM_SETNUMBOX, 5, ymdhm->year, 0, 9999, 1, 0);
  390.     MMI_SendMessage( numboxId[6], MM_SETNUMBOX, 5, ymdhm->month, 0, 12, 1, 0);
  391.     MMI_SendMessage( numboxId[7], MM_SETNUMBOX, 5, ymdhm->day, 0, 31, 1, 0);
  392.     MMI_SendMessage( numboxId[8], MM_SETNUMBOX, 5, ymdhm->hour, 0, 23, 1, 0);
  393.     MMI_SendMessage( numboxId[9], MM_SETNUMBOX, 5, ymdhm->minute, 0, 59, 1, 0);
  394.     
  395.     title_komiread(&j, &k, &l);
  396.     /*    リストメニューの設定をします。                        */
  397.     MMI_SendMessage(listMenuId[0], MM_SETMAXROWCOLUM, 2, 3, 11) ;
  398.     MMI_SendMessage(listMenuId[0], MM_SETCOLUMLEN, 2, 0, 11) ;
  399.     for (i = 0 ; i < sizeof(listString1)/sizeof(char *) ; i++)
  400.         MMI_SendMessage(listMenuId[0], MM_SETROWCOLUM, 3, i, 0, listString1[i]) ;
  401.     if(j== -1){
  402.         j = 0;
  403.     }
  404.     /*    リストメニューの先頭の項目を選択状態とします。        */
  405.     MMI_SendMessage(listMenuId[0], MM_SETROWCOLUM, 4, 
  406.                                         j, 0, listString1[j], TRUE) ;
  407.  
  408.     if(k== -1){
  409.         k = 5;
  410.     }
  411.     MMI_SendMessage( numboxId[10], MM_SETNUMBOX, 5, k, 0, 9999, 1, 0);
  412.     
  413.     /*    リストメニューの設定をします。                        */
  414.     MMI_SendMessage(listMenuId[1], MM_SETMAXROWCOLUM, 2, 2, 9) ;
  415.     MMI_SendMessage(listMenuId[1], MM_SETCOLUMLEN, 2, 0, 9) ;
  416.     for (i = 0 ; i < sizeof(listString2)/sizeof(char *) ; i++)
  417.         MMI_SendMessage(listMenuId[1], MM_SETROWCOLUM, 3, i, 0, listString2[i]) ;
  418.  
  419.     if(l== -1){
  420.         l = 0;
  421.     }
  422.     /*    リストメニューの先頭の項目を選択状態とします。        */
  423.     MMI_SendMessage(listMenuId[1], MM_SETROWCOLUM, 4, 
  424.                                         l, 0, listString2[l], TRUE) ;
  425.  
  426.     /*    リストメニューの設定をします。                        */
  427.     MMI_SendMessage(listMenuId[2], MM_SETMAXROWCOLUM, 2, 5, 13) ;
  428.     MMI_SendMessage(listMenuId[2], MM_SETCOLUMLEN, 2, 0, 13) ;
  429.     for (i = 0 ; i < sizeof(listString3)/sizeof(char *) ; i++)
  430.         MMI_SendMessage(listMenuId[2], MM_SETROWCOLUM, 3, i, 0, listString3[i]) ;
  431.  
  432.     title_issueread(&vicdef_id, &vicdef_number);
  433.     switch(vicdef_id ){
  434.         case 0: 
  435.             if(vicdef_number==-1){
  436.                 j=3;
  437.                 break;
  438.             }else{
  439.                 j=0;
  440.                 break;
  441.             }
  442.         case 1:
  443.             if(vicdef_number==-1){
  444.                 j=4;
  445.                 break;
  446.             }else{
  447.                 j=1;
  448.                 break;
  449.             }
  450.         case 2:
  451.             j=2;
  452.             break;
  453.         default:
  454.             j=0;
  455.             break;
  456.     }
  457.  
  458.     if(vicdef_number==-1){
  459.         k=0;
  460.     }else{
  461.         k=vicdef_number;
  462.     }
  463.     
  464.     /*    リストメニューの先頭の項目を選択状態とします。        */
  465.     MMI_SendMessage(listMenuId[2], MM_SETROWCOLUM, 4, 
  466.                                         j, 0, listString3[j], TRUE) ;
  467.  
  468.     MMI_SendMessage( numboxId[11], MM_SETNUMBOX, 5, k, 0, 9999, 1, 0);
  469.     
  470.     /*  カ-ソルを対局者黒の位置に持っていく */
  471.     MMI_SendMessage( blacknameId , MM_WAKE , 0 ) ; 
  472.     
  473.     /*    dialogId_titleでされるオブジェクトを表示する    */
  474.     MMI_SendMessage( dialogId_title , MM_SHOW , 0 ) ; 
  475.  
  476.     return NOERR ;
  477. }
  478.  
  479. /*    initDataMIDESK:mitem2Id[1]:MJ_MITEML40の呼び出し関数    */
  480. int    igo_comment(kobj, messId, argc, pev, trigger)
  481. int        kobj ;
  482. int        messId ;
  483. int        argc ;
  484. EVENT    *pev ;
  485. int        trigger ;
  486. {
  487.     MMI_SendMessage( commentId, MM_SETTEXT, 3, kifu_commentread(), 256, FALSE);
  488.     /*    オブジェクトをダイアログに取り付ける    */
  489.     MMI_SendMessage( commentdialogId, MM_ATTACH , 1 , deskTopId ) ;
  490.  
  491.     /*    commentに直ちに文章が書けるようにする */
  492.     MMI_SendMessage( commentId , MM_WAKE , 0 ); 
  493.     
  494.     /*    commentdialogIdでされるオブジェクトを表示する    */
  495.     MMI_SendMessage( commentdialogId , MM_SHOW , 0 ) ; 
  496.  
  497.     return NOERR ;
  498. }
  499.  
  500. /*    initDataMIDESK:mitem2Id[2]:MJ_MITEML40の呼び出し関数    */
  501. int    igo_chg_put(kobj, messId, argc, pev, trigger)
  502. int        kobj ;
  503. int        messId ;
  504. int        argc ;
  505. EVENT    *pev ;
  506. int        trigger ;
  507. {
  508.     kifu_chg_put();
  509.     comment_dispFunc();    
  510.     MMI_SendMessage( deskTopId, MM_SHOW , 0 ) ; 
  511.     return NOERR ;
  512. }
  513.  
  514. /*    initDataMIDESK:mitem2Id[3]:MJ_MITEML40の呼び出し関数    */
  515. int    igo_chg_cancel(kobj, messId, argc, pev, trigger)
  516. int        kobj ;
  517. int        messId ;
  518. int        argc ;
  519. EVENT    *pev ;
  520. int        trigger ;
  521. {
  522.     kifu_chg_cancel();
  523.     comment_dispFunc();
  524.     MMI_SendMessage( deskTopId, MM_SHOW , 0 ) ; 
  525.  
  526.     return NOERR ;
  527. }
  528.  
  529. /*    initDataMIDESK:mitem2Id[10]:MJ_MITEML40の呼び出し関数    */
  530. int    igo_abandon(kobj, messId, argc, pev, trigger)
  531. int        kobj ;
  532. int        messId ;
  533. int        argc ;
  534. EVENT    *pev ;
  535. int        trigger ;
  536. {
  537.     kifu_abandon();
  538.     comment_dispFunc();
  539.     MMI_SendMessage( deskTopId , MM_SHOW , 0 ) ; 
  540.     return NOERR ;
  541. }
  542.  
  543. /*    initDataMIDESK:mitem2Id[4]:MJ_MITEML40の呼び出し関数    */
  544. int    igo_nummberdisp(kobj, messId, argc, pev, trigger)
  545. int        kobj ;
  546. int        messId ;
  547. int        argc ;
  548. EVENT    *pev ;
  549. int        trigger ;
  550. {
  551.     kifu_numberdisp();
  552.     comment_dispFunc();
  553.     MMI_SendMessage( deskTopId, MM_SHOW , 0 ) ; 
  554.  
  555.     return NOERR ;
  556. }
  557.  
  558. /*    initDataMIDESK:mitem2Id[5]:MJ_MITEML40の呼び出し関数    */
  559. int    igo_rebirthset(kobj, messId, argc, pev, trigger)
  560. int        kobj ;
  561. int        messId ;
  562. int        argc ;
  563. EVENT    *pev ;
  564. int        trigger ;
  565. {
  566.     /*    オブジェクトをダイアログに取り付ける    */
  567.     MMI_SendMessage( auto_alertId , MM_ATTACH , 1 , deskTopId ) ;
  568.  
  569.     /*    dialogId_handyでされるオブジェクトを表示する    */
  570.     MMI_SendMessage( auto_alertId , MM_SHOW , 0 ) ; 
  571.  
  572.     return NOERR ;
  573. }
  574.  
  575. /*    initDataMIDESK:mitem2Id[11]:MJ_MITEML40の呼び出し関数    */
  576. int    igo_autorebirth(kobj, messId, argc, pev, trigger)
  577. int        kobj ;
  578. int        messId ;
  579. int        argc ;
  580. EVENT    *pev ;
  581. int        trigger ;
  582. {
  583. int rebirth_speed;
  584. EVENT    *pevent;
  585.  
  586.     rebirth_speed = kifu_rebirth_speed_set( 0);
  587.     
  588.     if(kifu_forward() == REPEAT_CANNOT_BOTTOM_CELL){
  589.         kifu_first();
  590.     }
  591.     
  592.     do{
  593.         MMI_iosense();
  594.         kifu_forward();
  595.         comment_dispFunc();
  596.         ban_note_disp();
  597.         MMI_WaitLoop(rebirth_speed*10);
  598.     }while(MMI_GetEvnt(EVMOSUP | EVMOSDN | EVKEY, &pevent) < NOERR);
  599.     
  600.     kifu_rebirth_speed_set( rebirth_speed);
  601.     return NOERR ;
  602. }
  603.  
  604. /*    initDataMIMENU:mitem2Id[16]:MJ_MITEML40の呼び出し関数    */
  605. int    igo_check(kobj, messId, argc, pev, trigger)
  606. int        kobj ;
  607. int        messId ;
  608. int        argc ;
  609. EVENT    *pev ;
  610. int        trigger ;
  611. {
  612.     /*    オブジェクトをダイアログに取り付ける    */
  613.     MMI_SendMessage( check_alertId , MM_ATTACH , 1 , deskTopId ) ;
  614.  
  615.     /*    dialogId_handyでされるオブジェクトを表示する    */
  616.     MMI_SendMessage( check_alertId , MM_SHOW , 0 ) ; 
  617.  
  618.     return NOERR ;
  619. }
  620.  
  621. /*    initDataMIDESK:mitem2Id[12]:MJ_MITEML40の呼び出し関数    */
  622. int    igo_judge(kobj, messId, argc, pev, trigger)
  623. int        kobj ;
  624. int        messId ;
  625. int        argc ;
  626. EVENT    *pev ;
  627. int        trigger ;
  628. {
  629.     judge_set();
  630.  
  631.     return NOERR ;
  632. }
  633.  
  634. /*    initDataMIDESK:mitem2Id[6]:MJ_MITEML40の呼び出し関数    */
  635. int    igo_kaiten1(kobj, messId, argc, pev, trigger)
  636. int        kobj ;
  637. int        messId ;
  638. int        argc ;
  639. EVENT    *pev ;
  640. int        trigger ;
  641. {
  642.     henkan_set( 1, 1);
  643.     comment_dispFunc();
  644.     MMI_SendMessage( deskTopId, MM_SHOW , 0 ) ; 
  645.     return NOERR ;
  646. }
  647.  
  648. /*    initDataMIDESK:mitem2Id[7]:MJ_MITEML40の呼び出し関数    */
  649. int    igo_kaiten2(kobj, messId, argc, pev, trigger)
  650. int        kobj ;
  651. int        messId ;
  652. int        argc ;
  653. EVENT    *pev ;
  654. int        trigger ;
  655. {
  656.     henkan_set( 2, 1);
  657.     comment_dispFunc();
  658.     MMI_SendMessage( deskTopId, MM_SHOW , 0 ) ; 
  659.     return NOERR ;
  660. }
  661.  
  662. /*    initDataMIDESK:mitem2Id[8]:MJ_MITEML40の呼び出し関数    */
  663. int    igo_kaiten3(kobj, messId, argc, pev, trigger)
  664. int        kobj ;
  665. int        messId ;
  666. int        argc ;
  667. EVENT    *pev ;
  668. int        trigger ;
  669. {
  670.     henkan_set( 3, 1);
  671.     comment_dispFunc();
  672.     MMI_SendMessage( deskTopId, MM_SHOW , 0 ) ; 
  673.     return NOERR ;
  674. }
  675.  
  676. /*    initDataMIDESK:mitem2Id[9]:MJ_MITEML40の呼び出し関数    */
  677. int    igo_hanten(kobj, messId, argc, pev, trigger)
  678. int        kobj ;
  679. int        messId ;
  680. int        argc ;
  681. EVENT    *pev ;
  682. int        trigger ;
  683. {
  684.     henkan_set( 0, -1);
  685.     comment_dispFunc();
  686.     MMI_SendMessage( deskTopId, MM_SHOW , 0 ) ; 
  687.     return NOERR ;
  688. }
  689.  
  690. /*    initDataMIMENU:mitem2Id[13]:MJ_MITEML40の呼び出し関数    */
  691. int    igo_bandisp(kobj, messId, argc, pev, trigger)
  692. int        kobj ;
  693. int        messId ;
  694. int        argc ;
  695. EVENT    *pev ;
  696. int        trigger ;
  697. {
  698.     MMI_SendMessage( ban_windowId , MM_ATTACH , 1 , deskTopId ) ;
  699.     MMI_SendMessage( ban_windowId , MM_SHOW , 0 ) ; 
  700.     return NOERR ;
  701. }
  702.  
  703. /*    initDataMIMENU:mitem2Id[14]:MJ_MITEML40の呼び出し関数    */
  704. int    igo_notedisp(kobj, messId, argc, pev, trigger)
  705. int        kobj ;
  706. int        messId ;
  707. int        argc ;
  708. EVENT    *pev ;
  709. int        trigger ;
  710. {
  711.     MMI_SendMessage( note_windowId , MM_ATTACH , 1 , deskTopId ) ;
  712.     MMI_SendMessage( note_windowId , MM_SHOW , 0 ) ; 
  713.     return NOERR ;
  714. }
  715.  
  716. /*    ファイルダイアログ処理関数        */
  717. int fdlgFunc( PathName )
  718. char *PathName ;
  719. {
  720. static    char *ExtStr[] = {"*.kif" , NULL} ;    /*    ワイルドカードの指定    */
  721.     unsigned int MSlctCnt ;    /*    選択されたファイル数(ここでは使っていない) */
  722.     int    Atr ;
  723.     int    ret ;
  724.  
  725.     /*    ファイルダイアログを表示している間は        
  726.             メニューを選択できないようにする         */
  727.     MTL_setAtrObj( deskTopId , MS_INACTIVEL40) ;
  728.  
  729.     /*    ファイルダイアログの表示            */
  730.     ret = FDG_DspFileDlg( MMI_GetBaseObj(), FDG_TEXT, NULL, ExtStr, &MSlctCnt ) ;
  731.  
  732.     /*    "実行"が押されたならファイル名を取得する    */
  733.     if( ret )
  734.     {
  735.         FDG_GetPathName( PathName , &Atr , 0 ) ;
  736.     }
  737. /*  この関数を設定するとうまく動かない 
  738.     FDG_FreeFileDlg();
  739.  */
  740.  
  741.     /*    選択不可だったものを元に戻す        */
  742.     MTL_resetAtrObj( deskTopId , (~MS_INACTIVEL40)) ;
  743.  
  744.     return ret ;
  745. }
  746.  
  747. /*    棋譜タイトル表示関数        */
  748. int title_dispFunc()
  749. {
  750.     char blackname[21];
  751.     char whitename[21];
  752.     char play_space[21];
  753.     int    komi_id, komi_number, hanmoku_id;
  754.     int    vicdef_id, vicdef_number;
  755.     char    start_time[80], end_time[80];
  756.     static    char wstr[80], t[80];
  757.     int handy;
  758.     char s[80];
  759.     
  760.     title_blacknameread( blackname);
  761.     title_whitenameread( whitename);
  762.     title_playspaceread( play_space);
  763.     title_komiread( &komi_id, &komi_number, &hanmoku_id);
  764.     title_issueread( &vicdef_id, &vicdef_number);
  765.     handy = title_handy_int_read();
  766.  
  767.     MMI_SendMessage( title_messageId[9], MM_SETMSG, 1, 
  768.                     title_short_fname_read());
  769.     MMI_SendMessage( textcommentId[0], MM_SETTEXT, 3, blackname, 21, FALSE);
  770.     MMI_SendMessage( textcommentId[1], MM_SETTEXT, 3, whitename, 21, FALSE);
  771.     
  772.     hyouji_start_end_time( start_time, end_time);
  773.     MMI_SendMessage( textcommentId[2], MM_SETTEXT, 3, start_time, 23, FALSE);
  774.  
  775.     MMI_SendMessage( textcommentId[3], MM_SETTEXT, 3, end_time, 23, FALSE);
  776.  
  777.     MMI_SendMessage( textcommentId[4], MM_SETTEXT, 3, play_space, 21, FALSE);
  778.     
  779.     if(handy == 1){
  780.         sprintf(s, "%-20s", "");
  781.     }else{
  782.         sprintf(s, " %u%-19s", handy, "子");
  783.     }
  784.     MMI_SendMessage( textcommentId[8], MM_SETTEXT, 3, s, 21, FALSE);
  785.     
  786.     switch(komi_id ){
  787.         case 0: strcpy(wstr, "黒コミ出し");break;
  788.         case 1: strcpy(wstr, "白コミ出し");break;
  789.         case 2: strcpy(wstr, "コミなし  ");break;
  790.         default: strcpy(wstr, "          ");break;
  791.     }
  792.     if(komi_id!=2 && komi_number > 0){
  793.         strcat(wstr, _itoa(komi_number, t, 10));
  794.         strcat(wstr, "目");
  795.         switch(hanmoku_id ){
  796.             case 0: strcat(wstr, "半");break;
  797.             case 1: strcat(wstr, "  ");break;
  798.             default:strcat(wstr, "  ");break;
  799.         }
  800.     }
  801.     MMI_SendMessage( textcommentId[5], MM_SETTEXT, 3, wstr, 21, FALSE);
  802.     
  803.     switch(vicdef_id ){
  804.         case 0: strcpy(wstr, "黒  ");break;
  805.         case 1: strcpy(wstr, "白  ");break;
  806.         case 2: strcpy(wstr, "ジゴ");break;
  807.         default: strcpy(wstr, "    ");break;
  808.     }
  809.     switch(vicdef_id ){
  810.         case 0: 
  811.         case 1: 
  812.             if(vicdef_number==-1){
  813.                 strcat(wstr, "中押し勝ち");
  814.             }else if(vicdef_number==0){
  815.                 if(hanmoku_id == 0 && (komi_id == 0 || komi_id == 1)){
  816.                     strcat(wstr, "半目勝ち");
  817.                 }else{
  818.                     strcat(wstr, "中押し勝ち");
  819.                 }
  820.             }else{
  821.                 strcat(wstr, _itoa(vicdef_number, t, 10));
  822.                 strcat(wstr, "目");
  823.                 if(hanmoku_id == 0 && (komi_id == 0 || komi_id == 1)){
  824.                     strcat(wstr, "半勝ち");
  825.                 }else if(vicdef_id != 2){
  826.                     strcat(wstr, "勝ち");
  827.                 }
  828.             }
  829.             break;
  830.         default: break;
  831.     }
  832.     MMI_SendMessage( textcommentId[6], MM_SETTEXT, 3, wstr, 21, FALSE);
  833.  
  834.     return 0;
  835. }
  836.  
  837. /*  93/06/15 現在未使用 */
  838. /*    棋譜タイトルクリア関数        */
  839. static int title_dispclearFunc()
  840. {
  841.     static    char wstr[80] = "                              ";
  842.  
  843.     MMI_SendMessage( textcommentId[0], MM_SETTEXT, 3, wstr, 21, FALSE);
  844.     MMI_SendMessage( textcommentId[1], MM_SETTEXT, 3, wstr, 21, FALSE);
  845.     MMI_SendMessage( textcommentId[2], MM_SETTEXT, 3, wstr, 23, FALSE);
  846.     MMI_SendMessage( textcommentId[3], MM_SETTEXT, 3, wstr, 23, FALSE);
  847.     MMI_SendMessage( textcommentId[4], MM_SETTEXT, 3, wstr, 21, FALSE);
  848.     MMI_SendMessage( textcommentId[5], MM_SETTEXT, 3, wstr, 21, FALSE);
  849.     MMI_SendMessage( textcommentId[6], MM_SETTEXT, 3, wstr, 21, FALSE);
  850.     
  851.     MMI_SendMessage( note_windowId , MM_SHOW , 0 ) ; 
  852.  
  853.     return 0;
  854. }
  855.  
  856. /*    コメント出力関数        */
  857. int comment_dispFunc()
  858. {
  859. char capture_message[12];
  860. int black_capture_number, white_capture_number;
  861.  
  862.     MMI_SendMessage( textcommentId[7], MM_SETTEXT, 3, kifu_commentread(), 256, FALSE);
  863.  
  864.     kifu_captureread(&black_capture_number, &white_capture_number);
  865.     sprintf(capture_message, "黒%3d 白%3d", black_capture_number,
  866.             white_capture_number);
  867.     MMI_SendMessage( textcommentId[9], MM_SETTEXT, 3, capture_message, 12, FALSE);
  868.  
  869.     return 0;
  870. }
  871.  
  872. /*    初期画面戻り関数        */
  873. int retunrInitMenuFunc()
  874. {
  875.     MMI_SendMessage( deskTopId , MM_SHOW , 0 ) ; 
  876.  
  877.     return 0;
  878. }
  879.